package org.sam.swing.table.verification;

import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;

/**
 * String,Collection,Map,Array必须在输入长度范围内;null校验通过
 * 
 * @author sam
 *
 */
public class SizeVerificatior extends AbstractVerificatior {

	/**
	 * 最小长度
	 */
	private int minValue = 0;

	/**
	 * 最大值 阈值
	 */
	private int maxValue = Integer.MAX_VALUE;

	/**
	 * 最大值 阈值
	 * 
	 * @return
	 */
	public int getMaxValue() {
		return maxValue;
	}

	/**
	 * 最大值 阈值
	 * 
	 * @param minValue
	 */
	public void setMaxValue(int maxValue) {
		this.maxValue = maxValue;
	}

	/**
	 * 最小长度
	 * 
	 * @return
	 */
	public int getMinValue() {
		return minValue;
	}

	/**
	 * 最小长度
	 * 
	 * @return
	 */
	public void setMinValue(int minValue) {
		this.minValue = minValue;
	}

	/**
	 * String,Collection,Map,Array必须在输入长度范围内;null校验通过
	 * 
	 * @param min
	 * @param max
	 */
	public SizeVerificatior(int min, int max) {
		super("输入必须为小于" + max);
		this.setMaxValue(max);
	}

	/**
	 * String,Collection,Map,Array必须在输入长度范围内;null校验通过
	 * 
	 * @param min
	 * @param max
	 * @param message
	 */
	public SizeVerificatior(int min, int max, String message) {
		super(message);
		this.setMaxValue(max);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public boolean verificat(Object v) {
		if (v == null)
			return true;

		int iLen = 0;
		Class<?> cls = v.getClass();

		if (v instanceof String) {
			iLen = v.toString().length();
		} else if (cls.isArray()) {
			iLen = Array.getLength(v);
		} else if (v instanceof Map) {
			iLen = ((Map<?, ?>) v).size();
		} else if (v instanceof Collection) {
			iLen = ((Collection<?>) v).size();
		} else {
			return false;
		}

		return iLen >= minValue && iLen <= maxValue;
	}

}
